home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * xanim_x11.c
- *
- * Copyright (C) 1990,1991,1992,1993,1994 by Mark Podlipec.
- * All rights reserved.
- *
- * This software may be freely copied, modified and redistributed without
- * fee for non-commerical purposes provided that this copyright notice is
- * preserved intact on all copies and modified copies.
- *
- * There is no warranty or other guarantee of fitness of this software.
- * It is provided solely "as is". The author(s) disclaim(s) all
- * responsibility and liability with respect to this software's usage
- * or its effect upon hardware or computer systems.
- *
- */
-
- #include "xanim.h"
-
- ULONG X11_Get_True_Color(r,g,b,bits)
- register ULONG r,g,b,bits;
- {
- register ULONG temp,temp_color;
-
- temp = (x11_red_bits >= bits)?(r << (x11_red_bits - bits))
- :(r >> (bits - x11_red_bits));
- temp_color = (temp << x11_red_shift) & x11_red_mask;
-
- temp = (x11_green_bits >= bits)?(g << (x11_green_bits - bits))
- :(g >> (bits - x11_green_bits));
- temp_color |= (temp << x11_green_shift) & x11_green_mask;
-
- temp = (x11_blue_bits >= bits)?(b << (x11_blue_bits - bits))
- :(b >> (bits - x11_blue_bits));
- temp_color |= (temp << x11_blue_shift) & x11_blue_mask;
-
- return(temp_color);
- }
-
- ULONG X11_Get_Line_Size(xsize)
- ULONG xsize;
- {
- ULONG line_size;
-
- if (x11_display_type == XA_MONOCHROME)
- line_size = X11_Get_Bitmap_Width(xsize) / 8;
- else line_size = xsize * x11_bytes_pixel;
- return(line_size);
- }
-
- void X11_Pre_Setup(argcp, argv,xa_user_visual,xa_user_class)
- int *argcp;
- char *argv[];
- LONG xa_user_visual;
- LONG xa_user_class;
- {
- LONG i,vis_num,vis_i;
-
- /* setup up X11 variables */
-
- x11_depth = 24;
- x11_class = TrueColor;
- x11_cmap_size = 256;
-
- /* Make sure x11_cmap_size is power of two */
- {
- ULONG size;
- size = 0x01; x11_disp_bits = 0;
- while(size <= x11_cmap_size) { size <<= 1; x11_disp_bits++; }
- size >>=1; x11_disp_bits--;
- x11_cmap_size = 0x01 << x11_disp_bits;
- }
- x11_bit_order = X11_LSB;
- x11_bitmap_unit = 3;
- x11_depth_mask = (0x01 << x11_depth) - 1;
- x11_cmap_type = 0;
-
- if (x11_depth == 1)
- {
- x11_display_type = XA_MONOCHROME;
- x11_bytes_pixel = 1; x11_bitmap_pad = x11_bitmap_unit;
- x11_cmap_flag = FALSE;
- x11_black = 0;
- x11_white = 1;
- x11_bits_per_pixel = 1;
- x11_byte_order = x11_bit_order;
- }
- else
- {
- if (x11_depth > 16)
- { x11_bytes_pixel = 4; x11_bitmap_pad = 32; }
- else if (x11_depth > 8)
- { x11_bytes_pixel = 2; x11_bitmap_pad = 16; }
- else { x11_bytes_pixel = 1; x11_bitmap_pad = 8; }
-
- x11_bits_per_pixel = x11_depth;
-
- switch(x11_class)
- {
-
- case StaticGray:
- x11_display_type = XA_STATICGRAY;
- x11_cmap_flag = FALSE;
- break;
- case GrayScale:
- x11_display_type = XA_GRAYSCALE;
- x11_cmap_flag = TRUE;
- break;
- case StaticColor:
- x11_display_type = XA_STATICCOLOR;
- x11_cmap_flag = FALSE;
- break;
- case PseudoColor:
- x11_display_type = XA_PSEUDOCOLOR;
- x11_cmap_flag = TRUE;
- break;
- case TrueColor:
- x11_display_type = XA_TRUECOLOR;
- x11_cmap_flag = FALSE;
- break;
- case DirectColor:
- x11_display_type = XA_DIRECTCOLOR;
- x11_cmap_flag = FALSE;
- break;
- default:
- fprintf(stderr,"Unkown x11_class %lx\n",x11_class);
- TheEnd();
- }
- }
-
- x11_red_mask = 255;
- x11_green_mask = 255<<8;
- x11_blue_mask = 255<<16;
- x11_red_shift = 0;
- x11_green_shift = 8;
- x11_blue_shift = 16;
- x11_red_bits = 8;
- x11_green_bits = 8;
- x11_blue_bits = 8;
-
- xa_cmap = (ColorReg *) malloc( x11_cmap_size * sizeof(ColorReg) );
- if (xa_cmap==0) fprintf(stderr,"X11 CMAP: couldn't malloc\n");
-
- if (x11_verbose_flag == TRUE)
- {
- fprintf(stderr,"Selected Visual: ");
- fprintf(stderr,"NEXTSTEP");
- fprintf(stderr," (%lx) \n",x11_display_type);
- fprintf(stderr," depth= %ld class= %ld cmap size=%ld(%ld) bytes_pixel=%ld\n",
- x11_depth, x11_class, x11_cmap_size, x11_disp_bits, x11_bytes_pixel );
- if (x11_display_type & XA_X11_TRUE)
- {
- fprintf(stderr," X11 Color Masks =%lx %lx %lx\n",
- x11_red_mask,x11_green_mask ,x11_blue_mask);
- fprintf(stderr," X11 Color Shifts=%ld %ld %ld\n",
- x11_red_shift, x11_green_shift, x11_blue_shift );
- fprintf(stderr," X11 Color Sizes =%ld %ld %ld\n",
- x11_red_bits,x11_green_bits ,x11_blue_bits);
- }
- else if (x11_display_type == XA_MONOCHROME)
- {
- fprintf(stderr," Bit Order = %lx bitmapunit = %lx\n",
- x11_bit_order,x11_bitmap_unit);
- }
- fprintf(stderr,"\n");
- }
-
- /* kludges */
- if ( (!(x11_display_type & XA_X11_TRUE))
- && (x11_depth == 24) && (x11_cmap_size <= 256) ) x11_kludge_1 = TRUE;
- }
-